package com.codrim.cs.data.rpc;

import com.codrim.cs.data.rpc.contants.RpcServiceVersions;
import com.codrim.cs.data.rpc.contants.RpcVersionSuffix;
import com.codrim.cs.data.rpc.dto.param.AffiliateWholeDayDataForPeriodParamDTO;
import com.codrim.cs.data.rpc.dto.param.AffiliateWholeDayDataParamDTO;
import com.codrim.cs.data.rpc.dto.param.AffiliateWholeDayDataRoleParamDTO;
import com.codrim.cs.data.rpc.dto.param.GeneralDataPermissionParam;
import com.codrim.cs.data.rpc.dto.param.TopAffiliateConversionParamDTO;
import com.codrim.cs.data.rpc.dto.param.WholeDayDataParamDTO;
import com.codrim.cs.data.rpc.dto.result.AffiliateWholeDayDataForPeriodResultDTO;
import com.codrim.cs.data.rpc.dto.result.RealTimeDataDTO;
import com.codrim.cs.data.rpc.dto.result.TopAffiliateConversionResultDTO;
import com.codrim.cs.data.rpc.dto.result.WholeAffiliateDataDTO;
import com.codrim.cs.data.rpc.dto.result.WholeDayDataResultDTO;

import java.util.List;

/**
 * 渠道数据服务
 *
 * @author Liang.Zhuge
 * @date 28/07/2017
 */
public interface AffiliateDataService {
    String RPC_VERSION = RpcServiceVersions.VERSION + RpcVersionSuffix.VERSION_SUFFIX;

    /**
     * 获取渠道指定日期一整天的统计数据
     *
     * @param param 查询参数
     * @return 统计结果
     *
     * @deprecated replace by {@link #affiliateWholeDayData(AffiliateWholeDayDataParamDTO, AffiliateWholeDayDataRoleParamDTO)}
     */
    List<WholeDayDataResultDTO> affiliateWholeDayData(WholeDayDataParamDTO param);

    /**
     * 查询渠道一整天的数据
     *
     * @param param     查询条件参数
     * @param roleParam 权限参数
     * @return 匹配到的数据
     */
    List<WholeDayDataResultDTO> affiliateWholeDayData(AffiliateWholeDayDataParamDTO param, AffiliateWholeDayDataRoleParamDTO roleParam);

    List<RealTimeDataDTO> affiliateWholeDayRealData(WholeDayDataParamDTO param);

    /**
     * 获取Offer下渠道的所有统计数据
     *
     * @param offerId 广告ID
     * @return 指定广告下所有渠道的统计数据
     */
    List<WholeAffiliateDataDTO> affiliateWholeDataForOffer(Integer offerId, Integer zoneId);

    /**
     * 获取渠道转化排行数据
     *
     * @param param 查询参数
     * @return 匹配到的排行数据
     */
    List<TopAffiliateConversionResultDTO> topAffiliateConversions(TopAffiliateConversionParamDTO param);

    /**
     * 获取时间范围内，渠道逐天汇总数据，包括统计、手工录入和实时数据
     *
     * @param param     查询条件
     * @param roleParam 权限条件
     * @return 匹配到的逐天汇总数据
     */
    AffiliateWholeDayDataForPeriodResultDTO wholeDayDataForPeriod(AffiliateWholeDayDataForPeriodParamDTO param,
            GeneralDataPermissionParam roleParam);
}
